package javaCode.chapter06;

import java.util.Scanner;

public class VarScopeDetail {

    public static void main(String[] args) {

        Person3 p1 = new Person3();

        /*
        属性生命周期较长，伴随着对象的创建而创建，伴随着对象的销毁而销毁。
        局部变量生命周期较短，伴随着它的代码块的执行而创建，
        伴随着代码块的结束而销毁。即在一次方法调用过程中。
         */
        //p1.say(); //当执行say方法时，say方法的局部变量比如name
        //会创建，当say执行完毕后name局部变量就会销毁，但是属性(全局变量)仍然可以使用

        TB tb = new TB();
        tb.test();  //第1种跨类访问对象的属性的方式
        tb.test2(p1);   //第2种跨类访问对象的属性的方式
    }
}

class TB {

    //全局变量/属性：可以被本类使用，或其他类使用 (通过对象调用)
    public void test(){
        Person3 p1 = new Person3();
        System.out.println(p1.name); //jack
    }

    public void test2(Person3 p){
        System.out.println(p.name);
    }
}

class Person3 {

    //全局变量/属性 可以加修饰符
    //局部变量不能加修饰符
    public int age =10;

    String name = "jack";

    public void say(){
        //细节 属性和局部变量可以重名，访问时遵循就近原则
        String name = "king";
        System.out.println("say() name="+name);
    }

}